/*
 * Título: gestHora. Aplicación web de gestión de horarios para conservatorios.
 * Alumnos:
 * - Javier Pardo Muñoz. I.T. Informática de Gestión
 * - Antonio Prior Cazorla. I.T. Informática de Gestión
 * Director: Dr. José Raúl Romero Salguero.
 *     
 *  Copyright (C) 2013 Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.uco.gesthora.business.gestorPDF;

import com.lowagie.text.DocumentException;
import es.uco.gesthora.business.Horario;
import es.uco.gesthora.business.gestorRutas.GestorRutas;
import java.io.*;
import org.w3c.tidy.Tidy;
import org.xhtmlrenderer.pdf.ITextRenderer;

/**
 * Maneja la capa lógica de todo lo relacionado con la generación de GestorPDF.
 *
 * @author Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 */
public class GestorPDF {

    private static GestorPDF instance = new GestorPDF();
    private Horario Horario = null;
    private String path = GestorRutas.getInstance().getPDFPath();

    /**
     * Constructor por defecto de la clase
     */
    private GestorPDF() {
        Horario = Horario.getInstance();
    }

    /**
     * Devuelve una instancia de la clase usando el patrón Singleton
     *
     * @return Instancia de la clase Horarios
     */
    public static GestorPDF getInstance() {
        return instance;
    }

    /**
     * Genera el PDF de un horario
     *
     * @param pathCSS: ruta absoluta de los CSS
     * @param tabla: codigo HTML de la tabla del horario
     * @param nombreArchivo: nombre de fichero del PDF
     * @throws FileNotFoundException
     * @throws IOException
     * @throws DocumentException
     */
    public void PDFHorario(String pathCSS, String tabla, String nombreArchivo) throws FileNotFoundException, IOException, DocumentException {

        String HTML = "<head><link rel=\"stylesheet\" type=\"text/css\" href=\"" + pathCSS + "/css/pdf.css\"></head><body><div class=landscape>" + tabla + "</div></body>";

        //Se convierte a XHTML
        ByteArrayInputStream b = new ByteArrayInputStream(HTML.getBytes());
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Tidy tidy = new Tidy();
        tidy.setXHTML(true);
        tidy.parse(b, out);
        String xhtml = out.toString();

        //Se genera el PDF
        OutputStream os = new FileOutputStream(new File(path + nombreArchivo));

        ITextRenderer renderer = new ITextRenderer();

        renderer.setDocumentFromString(xhtml);
        renderer.layout();
        renderer.createPDF(os);

        os.close();


    }

    /**
     * Genera el PDF de un listado de alumnos
     *
     * @param pathCSS: ruta absoluta de los CSS
     * @param tabla: codigo HTML de la tabla del horario
     * @param asignatura: nombre de la asignatura
     * @param nombreArchivo: nombre de fichero del PDF
     * @throws FileNotFoundException
     * @throws IOException
     * @throws DocumentException
     */
    public void PDFListado(String pathCSS, String tabla, String asignatura, String nombreArchivo) throws FileNotFoundException, IOException, DocumentException {

        String HTML = "<head><link rel=\"stylesheet\" type=\"text/css\" href=\"" + pathCSS + "/css/pdf.css\"></head><body><div class=landscape><h2>Listado de alumnos de " + asignatura + "</h2><br/>" + tabla + "</div></body>";

        //Se convierte a XHTML
        ByteArrayInputStream b = new ByteArrayInputStream(HTML.getBytes());
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Tidy tidy = new Tidy();
        tidy.setXHTML(true);
        tidy.parse(b, out);
        String xhtml = out.toString();

        //Se genera el PDF
        OutputStream os = new FileOutputStream(new File(path + nombreArchivo));

        ITextRenderer renderer = new ITextRenderer();

        renderer.setDocumentFromString(xhtml);
        renderer.layout();
        renderer.createPDF(os);

        os.close();


    }
}
